本文章同時發佈於:
大家好,繼上次Week24 - 用 Minecraft 來說明 Docker 為什麼這麼香 - 實作篇的文章後,接下來要實作此系列最一開始的目標「啟動多個 Minecraft Server」。
而 Docker-Compose 就是啟動多個 Server 的最佳幫手!
簡單來說就是:
管理多個 Docker 的程式。
大家應該都還記得啟動 Minecraft Server 的指令:
$ docker run -p 25565:25565 superj80820/minecraft-server
如果我們要再透過 Docker 來啟動第二個 Minecraft Server,必須要在這樣下指令:
$ docker run -p 25566:25565 superj80820/minecraft-server
可以發現-p
這個轉發 port 的參數,因為 25565 已經被第一個 Server 使用,所以必須換成 25566。
如果是兩個 Server 還好,但如果是幾十甚至幾百個 Server,就會有許多 port 這類的參數要調整。
而 Docker-Compose 就是可以把每個 Docker 的參數預先設定好,方便一起管理的程式。
Mac, Windows, Linux 的安裝方法官網寫得很清楚了,這邊就貼上官網連結,不多加討論,本文章以實作文主 XD。
首先可以透過 git 來 clone 完整範例,並進入 week25 資料夾
$ cd week25
使用以下指令啟動:
$ docker-compose up
這樣就起好兩台 Minecraft Server 了,非常簡單。
透過 Docker-Compose 設定,就不用再打許多參數了,而這些設定檔就放在 docker-compose.yml
這檔案裡。
此次 Minecraft Server 採用 docker-minecraft-server 的 Docker Image,此 Image 設計的相當彈性方便 XD ~
我們就來看看 docker-compose.yml
幫我們做了什麼吧,細節我都寫在註解中了:
# Docker-Compose 使用的版本,每個版本提供的設定功能不同,可參考官網:https://docs.docker.com/compose/compose-file/
version: "3.5"
# 使用 docker-compose up 指令後,要啟動的 servers ,也可稱為 services ,這邊設定了 server-1.16.1 與 server-1.15.2 兩個不同版本的 Minecraft Server。
services:
server-1.16.1:
# 使用指定的 Docker Image 。
image: itzg/minecraft-server
# 就是原本 -p 25565:25565 的指令,將 docker 內部的 25565 port 轉發至本機的 25565 port 。
ports:
- 25565:25565
# 設定環境變數,原本的 Minecraft Server 我們透過 eula.txt 與 server.properties 來設定 Server ,而此 Image 是透過啟動 Docker 後, Docker 內部的環境變數來設定 Server ,環境變數的相關文件在此:https://github.com/itzg/docker-minecraft-server#server-configuration
environment:
EULA: "TRUE"
VERSION: "1.16.1"
# 如果 Server 當機導致 Docker 崩潰了,會自動重啟 Docker 。
restart: always
server-1.15.2:
# 使用指定的 Docker Image 。
image: itzg/minecraft-server
# 就是原本 -p 25566:25565 的指令,將 docker 內部的 25565 port 轉發至本機的 25566 port 。
ports:
- 25566:25565
# 設定環境變數,原本的 Minecraft Server 我們透過 eula.txt 與 server.properties 來設定 Server ,而此 Image 是透過啟動 Docker 後, Docker 內部的環境變數來設定 Server ,環境變數的相關文件在此:https://github.com/itzg/docker-minecraft-server#server-configuration
environment:
EULA: "TRUE"
VERSION: "1.15.2"
# 如果 Server 當機導致 Docker 崩潰了,會自動重啟 Docker 。
restart: always
有了 Docker-Compose 後,我們可以把多個 Server 的設定檔都設定至 docker-compose.yml
,並把 docker-compose.yml
存至 git repository 或者任何線上儲存庫。
以後遇到新環境的建設,直接把 docker-compose.yml
下載下來並且下 docker-compose up
指令,就可以把整群 Server 都一次起好了,這就是 Docker-Compose 的魅力之處~
謝謝你的閱讀,也歡迎分享討論指正~